\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. avril 9 18:59:25 CEST 2012}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={OpenSSL - rsautl},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Utilitaire rsa},
CreationDate={D:20120409185925},
ModDate={D:20120409185925},
Keywords={PKI;sécurité;chiffrement;certificats}
}}
\begin{document}
 
\begin{center}
{\Huge OpenSSL - rsautl }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Utilitaire rsa}
 
\vspace{10mm}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -in filename]{Fichier d’entrée}
\item[\hspace{1mm} -out filename]{Fichier de sortie}
\item[\hspace{1mm} -inkey file]{Fichier de clé privée RSA en entrée}
\item[\hspace{1mm} -pubin]{Le fichier d’entrée est une clé publique RSA}
\item[\hspace{1mm} -certin]{L’entrée est un certificat contenant une clé publique RSA}
\item[\hspace{1mm} -sign]{Signe la donnée en entrée et sort le résultat signé. requière une clé privée RSA}
\item[\hspace{1mm} -verify]{Vérifie les données en entrée et sort les données récupérées}
\item[\hspace{1mm} -encrypt]{Chiffre l’entrée en utilisant la clé publique RSA}
\item[\hspace{1mm} -decrypt]{Déchiffre l’entrée en utilisant la clé privée RSA}
\item[\hspace{1mm} -pkcs, -oeap, -ssl, -raw]{Le padding à utiliser (respectivement PKCS\#1 v1.5, PKCS\#1 OEAP, padding utilisé dans ssl v2, aucun padding). pour les signatures, seul -pkcs et -raw sont utilisé}
\item[\hspace{1mm} -hexdump]{Dump en hexa les données en sortie}
\item[\hspace{1mm} -asn1parse]{asn1parse la sortie. utile avec -verify}
\end{description}
 
\vspace{1cm}{\huge Notes }
 
\
 
\hspace{1mm}  rsautl utilise directement l’algorithme RSA, il ne peut être utlisé que pour de petites portions de données.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Signer des données en utilisant une clé privée: \\
\hspace{1mm} \textbf{openssl rsautl -sign -in file -inkey key.pem -out sig} \\
\hspace{1mm} Récupérer les données signées: \\
\hspace{1mm} \textbf{openssl rsautl -verify -in sig -inkey key.pem} \\
\hspace{1mm} Examiner les données signées en raw: \\
\hspace{1mm} \textbf{openssl rsautl -verify -in file -inkey key.pem -raw -hexdump} \\
 
{\ttfamily
0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................\\ 0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64 .....hello world\\
}
\vspace{8mm}
 
\hspace{1mm}  Ce block est formaté PKCS\#1. çà été fait en utilisant encrypt puis en déchiffrant le block detype 2 (le 2eme octet) et un padding aléatoire visible à la place des octets 0xff. Il est possible d’analyser la signature des certificats en utilisant rsautl avec asn1parse.
\vspace{5mm} \\
 
 
\hspace{1mm} En considérant un exemple auto-signé dans certs/pca-cert.pem: \\
\hspace{1mm} \textbf{openssl asn1parse -in pca-cert.pem} \\
 
{\ttfamily
0:d=0 hl=4 l= 742 cons : SEQUENCE\\ 4:d=1 hl=4 l= 591 cons : SEQUENCE\\ 8:d=2 hl=2 l= 3 cons : cont \texttt{[} 0 \texttt{]}\\ 10:d=3 hl=2 l= 1 prim : INTEGER :02\\ 13:d=2 hl=2 l= 1 prim : INTEGER :00\\ 16:d=2 hl=2 l= 13 cons : SEQUENCE\\ 18:d=3 hl=2 l= 9 prim : OBJECT :md5WithRSAEncryption\\ 29:d=3 hl=2 l= 0 prim : NULL\\ 31:d=2 hl=2 l= 92 cons : SEQUENCE\\ 33:d=3 hl=2 l= 11 cons : SET\\ 35:d=4 hl=2 l= 9 cons : SEQUENCE\\ 37:d=5 hl=2 l= 3 prim : OBJECT :countryName\\ 42:d=5 hl=2 l= 2 prim : PRINTABLESTRING :AU\\ ....\\ 599:d=1 hl=2 l= 13 cons : SEQUENCE\\ 601:d=2 hl=2 l= 9 prim : OBJECT :md5WithRSAEncryption\\ 612:d=2 hl=2 l= 0 prim : NULL\\ 614:d=1 hl=3 l= 129 prim : BIT STRING\\
}
\vspace{8mm}
 
\hspace{1mm} Le BIT STRING final contient la signature actuelle, et peut être extrait avec: \\
\hspace{1mm} \textbf{openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614} \\
\hspace{1mm} La clé publique du certificat peut être extrait avec: \\
\hspace{1mm} \textbf{openssl x509 -in test/testx509.pem -pubkey -noout >pubkey.pem} \\
\hspace{1mm} La signature peut être analysée avec: \\
\hspace{1mm} \textbf{openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin} \\
 
{\ttfamily
0:d=0 hl=2 l= 32 cons : SEQUENCE\\ 2:d=1 hl=2 l= 12 cons : SEQUENCE\\ 4:d=2 hl=2 l= 8 prim : OBJECT :md5\\ 14:d=2 hl=2 l= 0 prim : NULL\\ 16:d=1 hl=2 l= 16 prim : OCTET STRING\\ 0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H\%..\\
}
\vspace{8mm}
 
\hspace{1mm} C’est la version parsée d’une structure ASN1 DigestInfo, ici avec un digest md5. \\
\hspace{1mm} La partie du certificat qui a été signée peut être extraite avec: \\
\hspace{1mm} \textbf{openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4} \\
\hspace{1mm} et son digest calculé avec: \\
\hspace{1mm} \textbf{openssl md5 -c tbs} \\
\hspace{1mm} \textbf{MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5} \\
\hspace{1mm} Qui peut être récupéré avec cette valeur. \\
\end{flushleft}
\end{document}
